package com.sy.simpleegg.platform.kkb.loader

import android.annotation.SuppressLint
import com.sy.simpleegg.platform.kkb.api.IConfigApi
import com.sy.simpleegg.platform.kkb.api.ILoginApi
import com.sy.simpleegg.platform.kkb.bean.login.GetRegisterNumData
import com.sy.simpleegg.platform.kkb.bean.login.LoginToken
import com.sy.simpleegg.platform.kkb.bean.login.RegisterData
import com.sy.simpleegg.platform.kkb.network.ApiWrapper
import com.sy.simpleegg.platform.kkb.network.base.BaseLoader
import com.sy.simpleegg.platform.kkb.network.base.BaseResult
import io.reactivex.Observer

class InitApiLoader: BaseLoader() {

    /**
     * 测试连接
     * @return
     */
    @SuppressLint("CheckResult")
    fun connectTest(observer: Observer<BaseResult<Any?>>) {
        ApiWrapper.singleInstance().setIsDebug(useTestUrl).getService(IConfigApi::class.java).connectTest()?.compose(ApiWrapper.singleInstance().applySchedulers(observer))
    }

    /**
     * 申请临时注册号
     * @param map {
     *      * MacID：设备唯一ID，
     *      * PayDeviceType:卡头类型,1=卡头,2=油菜盒子3=兑币机,
     *      * Sign:签名,
     *      * TS:当前时间（unix时间戳 单位s）,
     *      * HardNum:不超过8位,非油菜盒子为0,
     *      * CoinELevel:设备检测到的电平0=低，1=高.
     *      * TicketELevel:马达电平0=低，1=高,
     *      * TicketEyeELevel:光眼电平0=低，1=高,
     *      * NetIP:IP,
     *      * NetMask:子网掩码，
     *      * NetGateWay：网关，
     *      * BusinessNum：门店编号,来自配网参数
     *      * }
     * @param observer 响应
     * @param <T>
     */
    @SuppressLint("CheckResult")
    fun getRegistNum(map: Map<String?, Any>, observer: Observer<BaseResult<GetRegisterNumData?>>?) {
        ApiWrapper.singleInstance().setIsDebug(useTestUrl).getService(ILoginApi::class.java).getRegisterAdvanceNum(
            map
        )?.compose(ApiWrapper.singleInstance().applySchedulers(observer))
    }

    /**
     * 预注册
     *
     * @param map {
     *      * MacID：设备唯一ID，
     *      * PayDeviceType：卡头类型,1=卡头,2=油菜盒子,3=兑币机，
     *      * ShowNum：显示序号,如非0表示保留号码,不分配，
     *      * Sign：签名，
     *      * TS：当前时间（unix时间戳 单位s）
     *      * }
     * @return Object
     */
    @SuppressLint("CheckResult")
    fun preRegist(map: Map<String?, Any?>, observer: Observer<BaseResult<RegisterData?>>?) {
        ApiWrapper.singleInstance().setIsDebug(useTestUrl).getService(ILoginApi::class.java).registerDevice(
            map
        )?.compose(ApiWrapper.singleInstance().applySchedulers(observer))
    }

    /**
     * 登录
     *
     * @param map {
     *      * AppID 应用名，
     *      * MacID 机器唯一ID，
     *      * Sign 签名，
     *      * AppVer 程序版本用于检查APP与服务匹配可用性（暂存），
     *      * HardVer 设备硬件版本，
     *      * TS 时间戳，
     *      * DevNum 备统一编号
     *      * }
     * @param observer 响应
     * @param <T>      设置类型
     */
    @SuppressLint("CheckResult")
    fun loginToken(map: Map<String?, Any?>, observer: Observer<BaseResult<LoginToken?>>?) {
        ApiWrapper.singleInstance().setIsDebug(useTestUrl).getService(ILoginApi::class.java).loginToken(
            map
        )?.compose(ApiWrapper.singleInstance().applySchedulers(observer))
    }
}